package com.code.google.mdsc.model;

import java.util.List;

/**
 * Encapsulates the data of a {@link Creditor} needed to create the valid data
 * for the payment section of an pain.008.002.02 conform XML document.
 * 
 */
public interface Creditor {

	/**
	 * 
	 * @param adressLine
	 *            It must not be <code>null</code> or an empty string.
	 * 
	 * @throws IllegalArgumentException
	 *             If the given parameter is invalid.
	 */
	public void addAdressLine(String adressLine);

	/**
	 * 
	 * @return the address
	 */
	public List<String> getAddress();

	/**
	 * 
	 * @return the BIC
	 */
	public String getBIC();

	/**
	 * 
	 * @return the country ISO-3166 code
	 */
	public String getCountry();

	/**
	 * 
	 * @return the IBAN
	 */
	public String getIBAN();

	/**
	 * 
	 * @return the identifier
	 */
	public String getIdentifier();

	/**
	 * 
	 * @return the name
	 */
	public String getName();

	/**
	 * 
	 * @param bic
	 *            It must not be <code>null</code> or an empty string.
	 * 
	 * @throws IllegalArgumentException
	 *             If the given parameter is invalid.
	 */
	public void setBIC(String bic);

	/**
	 * 
	 * @param country
	 *            It must not be <code>null</code> or an empty string. It must
	 *            be in ISO-3166 code.
	 * 
	 * @throws IllegalArgumentException
	 *             If the given parameter is invalid.
	 */
	public void setCountry(String country);

	/**
	 * 
	 * @param iban
	 *            It must not be <code>null</code> or an empty string.
	 * 
	 * @throws IllegalArgumentException
	 *             If the given parameter is invalid.
	 */
	public void setIBAN(String iban);

	/**
	 * 
	 * @param identifier
	 *            It must not be <code>null</code> or an empty string.
	 * 
	 * @throws IllegalArgumentException
	 *             If the given parameter is invalid.
	 */
	public void setIdentifier(String identifier);

	/**
	 * 
	 * @param name
	 *            It must not be <code>null</code> or an empty string.
	 * 
	 * @throws IllegalArgumentException
	 *             If the given parameter is invalid.
	 */
	public void setName(String name);
}
